#include "projectitem.h"
#include "../helper.h"
class ProjectItemPrivate{
	public:
	ProjectItemPrivate():itemName("undefined") {}
		~ProjectItemPrivate() {}
		ProjectItem::Status status;
		QString itemName;
};

ProjectItem::ProjectItem(Opl::Core::EntityObject *parent) :
	Opl::Core::EntityObject(parent), O_PRIVATE_CREATE(ProjectItem)
{
	O_D(ProjectItem);
	//d->
	setStatus(s_unloaded);
}

ProjectItem::~ProjectItem()
{
	O_PRIVATE_DELETE;
}

ProjectItem::Status ProjectItem::status()
{
	O_D(ProjectItem);
	return d->status;
}

void ProjectItem::setStatus(Status s)
{
	O_D(ProjectItem);
	d->status = s;
	emit changed();
}

ProjectItem* ProjectItem::addItem(ProjectItem* item)
{
    Q_ASSERT(item);
    O_D(ProjectItem);
    item->setParent(this);
    return item;
}

QList<ProjectItem*> ProjectItem::items()
{
	O_D(ProjectItem);
	QList<ProjectItem*> i;
	foreach(QObject*o, this->children())
	{
		ProjectItem* item = qobject_cast<ProjectItem*>(o);
		if (item != 0)
			i.append(item);
	}
	return i;
}

void ProjectItem::setName(const QString& n)
{
	O_D(ProjectItem);
	d->itemName = n;
}

QString ProjectItem::name()const
{
	O_C(ProjectItem);
	return d->itemName;
}

QWidget* ProjectItem::widget()
{
	static QLabel* label = 0;
	if (label == 0)
		label = new QLabel(toString());

	return label;
}

QVariantMap ProjectItem::serialize()
{
	O_D(ProjectItem);
	QVariantMap map;
	map.insert("name", name());
	map.insert("type", metaObject()->className());
	return map;
}

void ProjectItem::deserialize( const QVariantMap& m )
{
	O_D(ProjectItem);
	setName(m.value("name").toString());
}
